﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.Data;
using System.Net.Mail;
using System.Net;

namespace CMD.BAL.SOL
{
    [DataContractAttribute]
    public class NotificacionesWeb
    {
        [DataMemberAttribute(EmitDefaultValue = false)]
        public string unidSolicitud;
        [DataMemberAttribute(EmitDefaultValue = false)]
        public string email;
        [DataMemberAttribute(EmitDefaultValue = false)]
        public string msg;
        [DataMemberAttribute(EmitDefaultValue = false)]
        public string msgAsunto;
        [DataMemberAttribute(EmitDefaultValue = false)]
        public string grupos;
        public NotificacionesWeb GetDataEmail(string unidSolicitud,int idStatus)
        {
            try
            {
                NotificacionesWeb em;
                String mail_tmp;
                DataTable dt = CMD_WEB.DAL.SrvDB.ExecuteQuery("exec SP_CMD_GET_EMAIL_WEB'" + unidSolicitud + "'," + idStatus + "");
                if (dt.Rows.Count == 0)
                {
                    return null;
                }

                string Pcorreos;// = dt.Rows[0]["EMAIL"].ToString();//.Remove(dt.Rows[0]["EMAIL"].ToString().Length - 1);
                if (idStatus == 4)
                {
                    string Pgrupos = dt.Rows[0]["GROUPS"].ToString(); //.Remove(dt.Rows[0]["GROUPS"].ToString().Length - 1);
                    //correos = correos.Remove(correos.Length - 1);
                    string[] grupos = (Convert.ToString(Pgrupos).Split('|'));
                    foreach (string grupo in grupos)
                    {
                        string[] grupAndMail = (Convert.ToString(grupo).Split('#'));
                        mail_tmp=GetEmailsByGroup(grupAndMail[0]);
                        if (mail_tmp == "XXXXXXXXXX")
                        {
                            if (grupAndMail[1] != "" && email != "")
                                grupAndMail[1] = ";" + grupAndMail[1];
                            email += grupAndMail[1];//return new NotificacionesWeb(Pcorreos, Convert.ToString(dt.Rows[0]["UNID_SOLICITUD"]), Convert.ToString(dt.Rows[0]["MSG"]), Convert.ToString(dt.Rows[0]["MSG_ASUNTO"]));
                        }
                        else
                        {
                            if (mail_tmp != "" && email != "")
                                mail_tmp = ";" + mail_tmp;
                            email += mail_tmp;
                        }
                    }
                    em = new NotificacionesWeb(email, Convert.ToString(dt.Rows[0]["UNID_SOLICITUD"]), Convert.ToString(dt.Rows[0]["MSG"]), Convert.ToString(dt.Rows[0]["MSG_ASUNTO"]), Pgrupos);
                }
                else
                {
                    Pcorreos = dt.Rows[0]["EMAIL"].ToString();//.Remove(dt.Rows[0]["EMAIL"].ToString().Length - 1);
                    em = new NotificacionesWeb(Pcorreos, Convert.ToString(dt.Rows[0]["UNID_SOLICITUD"]), Convert.ToString(dt.Rows[0]["MSG"]), Convert.ToString(dt.Rows[0]["MSG_ASUNTO"]));
                }
                return em;
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }
        public NotificacionesWeb()
        {
            email = "";
            unidSolicitud= "";
            msg = "";
            msgAsunto = "";
            grupos = "";
            
        }
        public NotificacionesWeb(string email,string unidSolicitud, string msg, string msgAsunto)
        {
            this.email = email;
            this.unidSolicitud = unidSolicitud;
            this.msg = msg;
            this.msgAsunto = msgAsunto;

        }
        public NotificacionesWeb(string email, string unidSolicitud, string msg, string msgAsunto,string grupos)
        {
            this.email = email;
            this.unidSolicitud = unidSolicitud;
            this.msg = msg;
            this.msgAsunto = msgAsunto;
            this.grupos = grupos;

        }

        public string GetEmailsByGroup(string group)
        {
            CMD.BAL.MISC.UpsertStateMsg urs;
            List<AUTH.UserData> ListaUsuarios = new List<AUTH.UserData>();
            AUTH.User o = new AUTH.User();

            //Obtiene los datos de los usuarios del grupo Active DIrectory especificado
            try
            {
                ListaUsuarios = o.GetListUserData(group);
                string correos = "";
                foreach (AUTH.UserData user in ListaUsuarios)
                {
                    correos += user.UserMail + ";";
                }
                correos = correos.Remove(correos.Length - 1);
                urs = o.UpsertMailbyGroup(group, correos);
                return correos;

            }
            catch
            {
                return "XXXXXXXXXX";
            }
        }

        public void SendLastMails(string unid_sol, string mensaje, string asunto)
        {
            try
            {
                string grupos="";
                NotificacionesWeb em;
                String mail="",email_temp;
                DataTable dt = CMD_WEB.DAL.SrvDB.ExecuteQuery("exec SP_SEL_ALL_SOL_GROUPS " + unid_sol);
                if (dt.Rows.Count == 0)
                {
                    return;
                }
                foreach (DataRow row in dt.Rows)
                {
                    grupos=(grupos!="")?row["DSC_SECGROUP"].ToString().ToLower():"|"+row["DSC_SECGROUP"].ToString().ToLower();
                    email_temp = GetEmailsByGroup(row["DSC_SECGROUP"].ToString().ToLower());
                    if (email_temp == "XXXXXXXXXX")
                        if (mail != "" && row["GROUPMAIL"].ToString().Trim() != "")
                            mail += ";" + row["GROUPMAIL"].ToString();
                        else
                            mail = row["GROUPMAIL"].ToString().Trim();
                    else
                    {
                        if (email_temp != "")
                            email_temp += ";" + email_temp;
                        mail += email_temp;
                    }
                }
                em = new NotificacionesWeb(email, unid_sol, mensaje, asunto, grupos);
                EnviaNotificacion(email, unid_sol, msg, msgAsunto);
            }
            catch (Exception ex)
            {
                return ;
            }
        }
        public static void EnviaNotificacion(string email, string unidSolicitud, string msgs, string msgAsunto)
        {
            string[] a;
            a = email.Split(';');
            MailMessage msg = new MailMessage();

            string fromemail = System.Configuration.ConfigurationManager.AppSettings["FromEmail"];
            for (int x = 0; x < a.Length; x++)
            {
                msg.To.Add(new MailAddress(a[x]));
            }
            msg.From = new MailAddress(fromemail);
            
            msg.Subject = msgAsunto;
            msg.Body = msgs;
            SmtpClient clienteSmtp = new SmtpClient("secure.smtp.pmi", 25);

            try
            {
                clienteSmtp.Send(msg);
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }
    }
}
